#ifndef __STORAGE_ADAPTER_H
#define __STORAGE_ADAPTER_H

#include "stm32f10x.h"
#include "bsp_dht11.h"
#include "./util/flash.h"
#include "W25Q64_Storage.h"

/* 存储适配器配置 */
#define USE_W25Q64_STORAGE      1       // 1=使用W25Q64, 0=使用内部Flash

/* 统一的存储状态定义 */
typedef enum
{
    STORAGE_SUCCESS = 0,
    STORAGE_ERROR,
    STORAGE_FULL,
    STORAGE_EMPTY,
    STORAGE_INVALID_PARAM
} Storage_Status_TypeDef;

/* 统一的DHT11数据结构 */
typedef struct
{
    uint8_t  humi_int;      // 湿度整数部分
    uint8_t  humi_deci;     // 湿度小数部分
    uint8_t  temp_int;      // 温度整数部分
    uint8_t  temp_deci;     // 温度小数部分
    uint8_t  check_sum;     // 校验和
    uint8_t  valid_flag;    // 有效标志
    uint8_t  reserved[1];   // 保留字节
} DHT11_Storage_Data_TypeDef;

/* 统一的存储接口函数 */
Storage_Status_TypeDef Storage_Init(void);
Storage_Status_TypeDef Storage_Test(void);  // 简化版本，不进行实际测试
Storage_Status_TypeDef DHT11_Storage_SaveData(DHT11_Data_TypeDef *dht11_data);
Storage_Status_TypeDef DHT11_Storage_ReadLatestData(DHT11_Storage_Data_TypeDef *data);
Storage_Status_TypeDef DHT11_Storage_EraseAllData(void);
uint8_t DHT11_Storage_HasValidData(void);
uint32_t DHT11_Storage_GetRecordCount(void);
void DHT11_Storage_PrintLatestData(void);

/* W25Q64专用扩展接口 */
#if USE_W25Q64_STORAGE
Storage_Status_TypeDef DHT11_Storage_ReadDataByIndex(uint32_t index, DHT11_Storage_Data_TypeDef *data);
Storage_Status_TypeDef DHT11_Storage_SetMode(uint8_t mode);  // 0=覆盖模式, 1=环形缓冲模式
uint8_t DHT11_Storage_GetMode(void);
void DHT11_Storage_PrintAllData(void);
void DHT11_Storage_PrintInfo(void);
Storage_Status_TypeDef DHT11_Storage_Format(void);
#endif

#endif
